let { start_app, click_item, wait_for, get_hours, get_minutes, has_text, wait_befor_click, click_id } = require('./lib.js');

// 编写主函数：程序启动后执行的逻辑代码。
function main() {
    // 判断当前时间是否超过了下午六点，如果是的话，需要执行下面的代码
    if (get_hours() > '18') {
        // 等待打卡提醒出现，点击我知道了，确保打卡提醒不会影响打卡
        if (has_text('打卡提醒')) {
            click_item('我知道了')
        }
        if (has_text('确定')) {
            click_item('确定')
        }
    }
    // s后刷新在打卡按钮中央，确保点击的是打卡按钮，在出现打卡按钮之前，点击 考勤打卡 入口按钮
    wait_befor_click('s后刷新', '考勤打卡')
    // 确保真的点了考勤打卡
    if (has_text('考勤打卡')) {
        click_item('考勤打卡')
    }
    // 多次尝试点击打卡按钮，确保成功点击
    let clickAttempts = 0;
    let success = false;
    while (clickAttempts < 5 && !success) {
        if (has_text('s后刷新')) {
            click_item('s后刷新')
            success = true
            sleep(500) // 点击后短暂等待
        }
        clickAttempts++;
    }
    let attempts = 0;
    while (attempts < 20) {
        if (has_text("打卡成功")) {
            // 打卡成功，退出当前程序
            back();
            sleep(800);
            back();
            sleep(800);
            back();
            start_app(senMessage, 'TIM', '打卡成功通知', false)
            break;
        }
        sleep(1000);
        attempts++;
        // 如果尝试次数超过20次，则重新执行打卡操作
        if (attempts >= 20) {
            // 回退一次
            back();
            main();
        }
    }
}

function senMessage() {
    // 等待点击大号发送消息
    wait_for('工具群')
    if (has_text('工具群')) {
        click_item('工具群')
    }
    wait_for('说点什么')
    if (has_text('说点什么')) {
        click_item('说点什么')
    }
    // 设置 当前时间 + 打卡成功
    setText(get_hours() + ':' + get_minutes() + '下班打卡成功')
    sleep(1000)
    text("发送").findOne().click()
    sleep(1000)
    back()
    back()
}

function jobBegin() {
    // 等待点击大号发送消息
    wait_for('工具群')
    if (has_text('工具群')) {
        click_item('工具群')
    }
    wait_for('说点什么')
    if (has_text('说点什么')) {
        click_item('说点什么')
    }
    // 设置 当前时间 + 打卡成功
    let sleepTime = Math.floor(Math.random() * 11); // 生成0-11的随机数
    setText(get_hours() + ':' + get_minutes() + '开启打卡程序，预计' + sleepTime + '分钟后开始打卡')
    sleep(1000)
    text("发送").findOne().click()
    sleep(1000)
    back()
    back()
    sleep(sleepTime * 1000 * 60); // 转换为分钟
    start_app(main, '新中大v5', '下班打卡', false)
}

// 启动应用：传入参数依次为：主函数，要启动的 App 名称，当前应用描述，是否语音播报执行状态。
start_app(jobBegin, 'TIM', '任务开始通知', false)